Privified insns replaced by hyperprivops.
Signed-off-by: Tristan Gingold <tristan.gingold@bull.net>
st8 [r11]=r10
;;
br.ret.sptk.many rp
- ;;
END(xen_set_rr)
GLOBAL_ENTRY(xen_fc)
(p7) fc r32;;
(p7) br.ret.sptk.many rp
;;
- ptc.e r96 // this is a "privified" fc r32
+ movl r9=XSI_PSR_IC
+ mov r8=r32
+ ;;
+ ld8 r10=[r9]
+ ;;
+ st8 [r9]=r0
+ ;;
+ XEN_HYPER_FC
+ ;;
+ st8 [r9]=r10
;;
br.ret.sptk.many rp
END(xen_fc)
(p7) mov r8=cpuid[r32];;
(p7) br.ret.sptk.many rp
;;
- mov r72=rr[r32] // this is a "privified" mov r8=cpuid[r32]
+ movl r9=XSI_PSR_IC
+ mov r8=r32
+ ;;
+ ld8 r10=[r9]
+ ;;
+ st8 [r9]=r0
+ ;;
+ XEN_HYPER_GET_CPUID
+ ;;
+ st8 [r9]=r10
;;
br.ret.sptk.many rp
END(xen_get_cpuid)
(p7) mov r8=pmd[r32];;
(p7) br.ret.sptk.many rp
;;
- mov r72=pmc[r32] // this is a "privified" mov r8=pmd[r32]
+ movl r9=XSI_PSR_IC
+ mov r8=r32
+ ;;
+ ld8 r10=[r9]
+ ;;
+ st8 [r9]=r0
+ ;;
+ XEN_HYPER_GET_PMD
+ ;;
+ st8 [r9]=r10
;;
br.ret.sptk.many rp
END(xen_get_pmd)
(p7) mov r8=ar24;;
(p7) br.ret.sptk.many rp
;;
- mov ar24=r72 // this is a "privified" mov r8=ar.eflg
+ movl r9=XSI_PSR_IC
+ mov r8=r32
+ ;;
+ ld8 r10=[r9]
+ ;;
+ st8 [r9]=r0
+ ;;
+ XEN_HYPER_GET_EFLAG
+ ;;
+ st8 [r9]=r10
;;
br.ret.sptk.many rp
END(xen_get_eflag)
+
// some bits aren't set if pl!=0, see SDM vol1 3.1.8
GLOBAL_ENTRY(xen_set_eflag)
movl r8=running_on_xen;;
(p7) mov ar24=r32
(p7) br.ret.sptk.many rp
;;
- // FIXME: this remains no-op'd because it generates
- // a privileged register (general exception) trap rather than
- // a privileged operation fault
- //mov ar24=r32
+ movl r9=XSI_PSR_IC
+ mov r8=r32
+ ;;
+ ld8 r10=[r9]
+ ;;
+ st8 [r9]=r0
+ ;;
+ XEN_HYPER_SET_EFLAG
+ ;;
+ st8 [r9]=r10
;;
br.ret.sptk.many rp
-END(xen_get_eflag)
+END(xen_set_eflag)
#endif
movl r30=1f // load continuation point in case of nested fault
;;
#ifdef CONFIG_XEN
-#if 1
mov r18=r8;
mov r8=r16;
XEN_HYPER_THASH;;
mov r17=r8;
mov r8=r18;;
-#else
- tak r17=r80 // "privified" thash
-#endif
#else
thash r17=r16 // compute virtual address of L3 PTE
#endif
#endif /* CONFIG_ITANIUM */
;;
#ifdef CONFIG_XEN
-#if 1
mov r18=r8;
mov r8=r16;
XEN_HYPER_THASH;;
mov r17=r8;
mov r8=r18;;
-#else
- tak r17=r80 // "privified" thash
-#endif
#else
thash r17=r16 // compute virtual address of L3 PTE
#endif
movl r30=1f // load continuation point in case of nested fault
;;
#ifdef CONFIG_XEN
-#if 1
mov r18=r8;
mov r8=r16;
XEN_HYPER_THASH;;
mov r17=r8;
mov r8=r18;;
-#else
- tak r17=r80 // "privified" thash
-#endif
#else
thash r17=r16 // compute virtual address of L3 PTE
#endif
#define XEN_HYPER_GET_RR break 0x10
#define XEN_HYPER_SET_RR break 0x11
#define XEN_HYPER_SET_KR break 0x12
+#define XEN_HYPER_FC break 0x13
+#define XEN_HYPER_GET_CPUID break 0x14
+#define XEN_HYPER_GET_PMD break 0x15
+#define XEN_HYPER_GET_EFLAG break 0x16
+#define XEN_HYPER_SET_EFLAG break 0x17
#endif
#ifndef __ASSEMBLY__